home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / Tool Chest / Interfaces / UniversalInterfaces 2.1B1 / PInterfaces / OCEMail.p < prev    next >
Encoding:
Text File  |  1995-04-18  |  46.6 KB  |  1,701 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        OCEMail.p
  3.  
  4.      Contains:    Apple Open Collaboration Environment OCEMail Interfaces.
  5.  
  6.      Version:    Technology:    AOCE Toolbox 1.02
  7.                  Package:    Universal Interfaces 2.1ß1 in “MPW Prerelease” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. }
  19.  
  20. {$IFC UNDEFINED UsingIncludes}
  21. {$SETC UsingIncludes := 0}
  22. {$ENDC}
  23.  
  24. {$IFC NOT UsingIncludes}
  25.  UNIT OCEMail;
  26.  INTERFACE
  27. {$ENDC}
  28.  
  29. {$IFC UNDEFINED __OCEMAIL__}
  30. {$SETC __OCEMAIL__ := 1}
  31.  
  32. {$I+}
  33. {$SETC OCEMailIncludes := UsingIncludes}
  34. {$SETC UsingIncludes := 1}
  35.  
  36.  
  37. {$IFC UNDEFINED __APPLEEVENTS__}
  38. {$I AppleEvents.p}
  39. {$ENDC}
  40. {    Errors.p                                                    }
  41. {        ConditionalMacros.p                                        }
  42. {    Types.p                                                        }
  43. {    Memory.p                                                    }
  44. {        MixedMode.p                                                }
  45. {    OSUtils.p                                                    }
  46. {    Events.p                                                    }
  47. {        Quickdraw.p                                                }
  48. {            QuickdrawText.p                                        }
  49. {    EPPC.p                                                        }
  50. {        AppleTalk.p                                                }
  51. {        Files.p                                                    }
  52. {        PPCToolbox.p                                            }
  53. {        Processes.p                                                }
  54. {    Notification.p                                                }
  55.  
  56. {$IFC UNDEFINED __FILES__}
  57. {$I Files.p}
  58. {$ENDC}
  59.  
  60. {$IFC UNDEFINED __MEMORY__}
  61. {$I Memory.p}
  62. {$ENDC}
  63.  
  64. {$IFC UNDEFINED __TEXTEDIT__}
  65. {$I TextEdit.p}
  66. {$ENDC}
  67.  
  68. {$IFC UNDEFINED __TYPES__}
  69. {$I Types.p}
  70. {$ENDC}
  71.  
  72. {$IFC UNDEFINED __DIGITALSIGNATURE__}
  73. {$I DigitalSignature.p}
  74. {$ENDC}
  75.  
  76. {$IFC UNDEFINED __OCE__}
  77. {$I OCE.p}
  78. {$ENDC}
  79. {    Aliases.p                                                    }
  80. {    Script.p                                                    }
  81. {        IntlResources.p                                            }
  82.  
  83. {$IFC UNDEFINED __OCEAUTHDIR__}
  84. {$I OCEAuthDir.p}
  85. {$ENDC}
  86.  
  87. {$IFC UNDEFINED __OCEMESSAGING__}
  88. {$I OCEMessaging.p}
  89. {$ENDC}
  90.  
  91. {$PUSH}
  92. {$ALIGN MAC68K}
  93. {$LibExport+}
  94. TYPE
  95.     MSAMIOCompletionProcPtr = ProcPtr;  { PROCEDURE MSAMIOCompletion(VAR paramBlock: MSAMParam); }
  96.     MSAMIOCompletionUPP = UniversalProcPtr;
  97.  
  98.     MailMsgRef = LONGINT;
  99.  
  100. { reference to an open msam queue }
  101.     MSAMQueueRef = LONGINT;
  102.  
  103. { identifies slots managed by a PMSAM }
  104.     MSAMSlotID = INTEGER;
  105.  
  106. { reference to an active mailbox }
  107.     MailboxRef = LONGINT;
  108.  
  109. { identifies slots within a mailbox }
  110.     MailSlotID = INTEGER;
  111.  
  112. { identifies a letter in a mailbox }
  113.     MailSeqNum = RECORD
  114.         slotID:                    MailSlotID;
  115.         seqNum:                    LONGINT;
  116.     END;
  117.  
  118. { A MailBuffer is used to describe a buffer used for an IO operation.
  119. The location of the buffer is pointed to by 'buffer'. 
  120. When reading, the size of the buffer is 'bufferSize' 
  121. and the size of data actually read is 'dataSize'.
  122. When writing, the size of data to be written is 'bufferSize' 
  123. and the size of data actually written is 'dataSize'.
  124. }
  125.     MailBuffer = RECORD
  126.         bufferSize:                LONGINT;
  127.         buffer:                    Ptr;
  128.         dataSize:                LONGINT;
  129.     END;
  130.  
  131. { A MailReply is used to describe a commonly used reply buffer format.
  132. It contains a count of tuples followed by an array of tuples.
  133. The format of the tuple itself depends on each particular call.
  134. }
  135.     MailReply = RECORD
  136.         tupleCount:                INTEGER;
  137.         { tuple[tupleCount] }
  138.     END;
  139.  
  140. { Shared Memory Communication Area used when Mail Manager sends 
  141. High Level Events to a PMSAM. 
  142. }
  143.     SMCA = RECORD
  144.         smcaLength:                INTEGER;                                { includes size of smcaLength field }
  145.         result:                    OSErr;
  146.         userBytes:                LONGINT;
  147.         CASE INTEGER OF
  148.         0: (
  149.             slotCID:                    CreationID;                            { for create/modify/delete slot calls }
  150.            );
  151.         1: (
  152.             msgHint:                    LONGINT;                            { for kMailEPPCMsgOpened }
  153.            );
  154.     END;
  155.  
  156. {************************************************************************************}
  157. { Value of creator and types fields for messages and blocks defined by MailManager }
  158.  
  159. CONST
  160.     kMailAppleMailCreator        = 'apml';                        { message and letter block creator }
  161.     kMailLtrMsgType                = 'lttr';                        { message type of letters, reports }
  162.     kMailLtrHdrType                = 'lthd';                        { contains letter header }
  163.     kMailContentType            = 'body';                        { contains content of letter }
  164.     kMailEnclosureListType        = 'elst';                        { contains list of enclosures }
  165.     kMailEnclosureDesktopType    = 'edsk';                        { contains desktop mgr info for enclosures }
  166.     kMailEnclosureFileType        = 'asgl';                        { contains a file enclosure }
  167. { format is defined by AppleSingle }
  168.     kMailImageBodyType            = 'imag';                        { contains image of letter }
  169. {        format is struct TPfPgDir - in Printing.h
  170.     *    struct TPfPgDir (
  171.     *        short    pageCount;        - number of pages in the image.
  172.     *        long    iPgPos[129];    - iPgPos[n] is the offset from the start of the block
  173.     *                                - to image of page n.
  174.     *                                - iPgPos[n+1] - iPgPos[n] is the length of page n.
  175. }
  176.     kMailMSAMType                = 'gwyi';                        { contains msam specific information }
  177.     kMailTunnelLtrType            = 'tunl';                        { used to read a tunnelled message }
  178.     kMailHopInfoType            = 'hopi';                        { used to read hopInfo for a tunnelled message }
  179.     kMailReportType                = 'rpti';                        { contains report info }
  180. {
  181. Reports have the isReport bit set in MailIndications and contain a block of type kMailReport.
  182. This block has a header, IPMReportBlockHeader,
  183. followed by an array of elements, each of type IPMRecipientReport
  184.  
  185. Various families used by mail or related msgs
  186. }
  187.     kMailFamily                    = 'mail';                        { Defines family of "mail" msgs: content, header, etc }
  188.     kMailFamilyFile                = 'file';
  189.  
  190. {************************************************************************************}
  191.     
  192. TYPE
  193.     MailAttributeID = INTEGER;
  194.  
  195. { Values of MailAttributeID }
  196. { Message store attributes - stored in the catalog }
  197. { Will always be present in a letter and have fixed sizes }
  198.  
  199. CONST
  200.     kMailLetterFlagsBit            = 1;                            { MailLetterFlags }
  201. { Letter attributes - stored in the letter 
  202.    Will always be present in a letter and have fixed sizes }
  203.     kMailIndicationsBit            = 3;                            { MailIndications }
  204.     kMailMsgTypeBit                = 4;                            { OCECreatorType }
  205.     kMailLetterIDBit            = 5;                            { MailLetterID }
  206.     kMailSendTimeStampBit        = 6;                            { MailTime }
  207.     kMailNestingLevelBit        = 7;                            { MailNestingLevel }
  208.     kMailMsgFamilyBit            = 8;                            { OSType }
  209. { Letter attributes - stored in the letter
  210.    May be present in a letter and have fixed sizes }
  211.     kMailReplyIDBit                = 9;                            { MailLetterID }
  212.     kMailConversationIDBit        = 10;                            { MailLetterID }
  213. { Letter attributes - stored in the letter
  214.    May be present in a letter and have variable length sizes }
  215.     kMailSubjectBit                = 11;                            { RString }
  216.     kMailFromBit                = 12;                            { MailRecipient }
  217.     kMailToBit                    = 13;                            { MailRecipient }
  218.     kMailCcBit                    = 14;                            { MailRecipient }
  219.     kMailBccBit                    = 15;                            { MailRecipient }
  220.  
  221.     
  222. TYPE
  223.     MailAttributeMask = LONGINT;
  224.  
  225. { Values of MailAttributeMask }
  226.  
  227. CONST
  228.     kMailLetterFlagsMask        = 1 * (2**((kMailLetterFlagsBit - 1)));
  229.     kMailIndicationsMask        = 1 * (2**((kMailIndicationsBit - 1)));
  230.     kMailMsgTypeMask            = 1 * (2**((kMailMsgTypeBit - 1)));
  231.     kMailLetterIDMask            = 1 * (2**((kMailLetterIDBit - 1)));
  232.     kMailSendTimeStampMask        = 1 * (2**((kMailSendTimeStampBit - 1)));
  233.     kMailNestingLevelMask        = 1 * (2**((kMailNestingLevelBit - 1)));
  234.     kMailMsgFamilyMask            = 1 * (2**((kMailMsgFamilyBit - 1)));
  235.     kMailReplyIDMask            = 1 * (2**((kMailReplyIDBit - 1)));
  236.     kMailConversationIDMask        = 1 * (2**((kMailConversationIDBit - 1)));
  237.     kMailSubjectMask            = 1 * (2**((kMailSubjectBit - 1)));
  238.     kMailFromMask                = 1 * (2**((kMailFromBit - 1)));
  239.     kMailToMask                    = 1 * (2**((kMailToBit - 1)));
  240.     kMailCcMask                    = 1 * (2**((kMailCcBit - 1)));
  241.     kMailBccMask                = 1 * (2**((kMailBccBit - 1)));
  242.  
  243.     
  244. TYPE
  245.     MailAttributeBitmap = LONGINT;
  246.  
  247. {************************************************************************************}
  248.     MailLetterSystemFlags = INTEGER;
  249.  
  250. { Values of MailLetterSystemFlags }
  251. { letter is available locally (either by nature or via cache) }
  252.  
  253. CONST
  254.     kMailIsLocalBit                = 2;
  255.  
  256.     kMailIsLocalMask            = 1 * (2**(kMailIsLocalBit));
  257.  
  258.     
  259. TYPE
  260.     MailLetterUserFlags = INTEGER;
  261.  
  262.  
  263. CONST
  264.     kMailReadBit                = 0;                            { this letter has been opened }
  265.     kMailDontArchiveBit            = 1;                            { this letter is not }
  266. { to be archived either because 
  267.                                            it has already been archived or 
  268.                                            it should not be archived. }
  269.     kMailInTrashBit                = 2;                            { this letter is in trash }
  270.  
  271. { Values of MailLetterUserFlags }
  272.     kMailReadMask                = 1 * (2**(kMailReadBit));
  273.     kMailDontArchiveMask        = 1 * (2**(kMailDontArchiveBit));
  274.     kMailInTrashMask            = 1 * (2**(kMailInTrashBit));
  275.  
  276.  
  277. TYPE
  278.     MailLetterFlags = RECORD
  279.         sysFlags:                MailLetterSystemFlags;
  280.         userFlags:                MailLetterUserFlags;
  281.     END;
  282.  
  283.     MailMaskedLetterFlags = RECORD
  284.         flagMask:                MailLetterFlags;                        { flags that are to be set }
  285.         flagValues:                MailLetterFlags;                        { and their values }
  286.     END;
  287.  
  288.  
  289. CONST
  290.     kMailOriginalInReportBit    = 1;
  291.     kMailNonReceiptReportsBit    = 3;
  292.     kMailReceiptReportsBit        = 4;
  293.     kMailForwardedBit            = 5;
  294.     kMailPriorityBit            = 6;
  295.     kMailIsReportWithOriginalBit = 8;
  296.     kMailIsReportBit            = 9;
  297.     kMailHasContentBit            = 10;
  298.     kMailHasSignatureBit        = 11;
  299.     kMailAuthenticatedBit        = 12;
  300.     kMailSentBit                = 13;
  301.  
  302. { Values of MailIndications }
  303.     kMailSentMask                = 1 * (2**((kMailSentBit - 1)));
  304.     kMailAuthenticatedMask        = 1 * (2**((kMailAuthenticatedBit - 1)));
  305.     kMailHasSignatureMask        = 1 * (2**((kMailHasSignatureBit - 1)));
  306.     kMailHasContentMask            = 1 * (2**((kMailHasContentBit - 1)));
  307.     kMailIsReportMask            = 1 * (2**((kMailIsReportBit - 1)));
  308.     kMailIsReportWithOriginalMask = 1 * (2**((kMailIsReportWithOriginalBit - 1)));
  309.     kMailPriorityMask            = 3 * (2**((kMailPriorityBit - 1)));
  310.     kMailForwardedMask            = 1 * (2**((kMailForwardedBit - 1)));
  311.     kMailReceiptReportsMask        = 1 * (2**((kMailReceiptReportsBit - 1)));
  312.     kMailNonReceiptReportsMask    = 1 * (2**((kMailNonReceiptReportsBit - 1)));
  313.     kMailOriginalInReportMask    = 3 * (2**((kMailOriginalInReportBit - 1)));
  314.  
  315.     
  316. TYPE
  317.     MailIndications = LONGINT;
  318.  
  319. { values of the field originalInReport in MailIndications }
  320.  
  321. CONST
  322.     kMailNoOriginal                = 0;                            { do not enclose original in reports }
  323.     kMailEncloseOnNonReceipt    = 3;                            { enclose original in non-delivery reports }
  324.  
  325.     
  326. TYPE
  327.     MailLetterID = IPMMsgID;
  328.  
  329.     MailTime = RECORD
  330.         time:                    UTCTime;                                { current UTC(GMT) time }
  331.         offset:                    UTCOffset;                                { offset from GMT }
  332.     END;
  333.  
  334. { innermost letter has nestingLevel 0 }
  335.     MailNestingLevel = INTEGER;
  336.  
  337.     MailRecipient = OCERecipient;
  338.  
  339. {************************************************************************************}
  340.  
  341. CONST
  342.     kMailTextSegmentBit            = 0;
  343.     kMailPictSegmentBit            = 1;
  344.     kMailSoundSegmentBit        = 2;
  345.     kMailStyledTextSegmentBit    = 3;
  346.     kMailMovieSegmentBit        = 4;
  347.  
  348.     
  349. TYPE
  350.     MailSegmentMask = INTEGER;
  351.  
  352. { Values of MailSegmentMask }
  353.  
  354. CONST
  355.     kMailTextSegmentMask        = 1 * (2**(kMailTextSegmentBit));
  356.     kMailPictSegmentMask        = 1 * (2**(kMailPictSegmentBit));
  357.     kMailSoundSegmentMask        = 1 * (2**(kMailSoundSegmentBit));
  358.     kMailStyledTextSegmentMask    = 1 * (2**(kMailStyledTextSegmentBit));
  359.     kMailMovieSegmentMask        = 1 * (2**(kMailMovieSegmentBit));
  360.  
  361.     
  362. TYPE
  363.     MailSegmentType = INTEGER;
  364.  
  365. { Values of MailSegmentType }
  366.  
  367. CONST
  368.     kMailInvalidSegmentType        = 0;
  369.     kMailTextSegmentType        = 1;
  370.     kMailPictSegmentType        = 2;
  371.     kMailSoundSegmentType        = 3;
  372.     kMailStyledTextSegmentType    = 4;
  373.     kMailMovieSegmentType        = 5;
  374.  
  375. {************************************************************************************}
  376.     kMailErrorLogEntryVersion    = $101;
  377.     kMailMSAMErrorStringListID    = 128;                            { These 'STR#' resources should be }
  378.     kMailMSAMActionStringListID    = 129;                            { in the PMSAM resource fork }
  379.  
  380.     
  381. TYPE
  382.     MailLogErrorType = INTEGER;
  383.  
  384. { Values of MailLogErrorType }
  385.  
  386. CONST
  387.     kMailELECorrectable            = 0;
  388.     kMailELEError                = 1;
  389.     kMailELEWarning                = 2;
  390.     kMailELEInformational        = 3;
  391.  
  392.     
  393. TYPE
  394.     MailLogErrorCode = INTEGER;
  395.  
  396. { Values of MailLogErrorCode }
  397.  
  398. CONST
  399.     kMailMSAMErrorCode            = 0;                            { positive codes are indices into
  400.                                                    PMSAM defined strings }
  401.     kMailMiscError                = -1;                            { negative codes are OCE defined }
  402.     kMailNoModem                = -2;                            { modem required, but missing }
  403.  
  404.  
  405. TYPE
  406.     MailErrorLogEntryInfo = RECORD
  407.         version:                INTEGER;
  408.         timeOccurred:            UTCTime;                                { do not fill in }
  409.         reportingPMSAM:            Str31;                                    { do not fill in }
  410.         reportingMSAMSlot:        Str31;                                    { do not fill in }
  411.         errorType:                MailLogErrorType;
  412.         errorCode:                MailLogErrorCode;
  413.         errorResource:            INTEGER;                                { resources are valid if }
  414.         actionResource:            INTEGER;                                { errorCode = kMailMSAMErrorCode
  415.                                                    index starts from 1 }
  416.         filler:                    LONGINT;
  417.         filler2:                INTEGER;
  418.     END;
  419.  
  420. {************************************************************************************}
  421.     MailBlockMode = INTEGER;
  422.  
  423. { Values of MailBlockMode }
  424.  
  425. CONST
  426.     kMailFromStart                = 1;                            { write data from offset calculated from }
  427.     kMailFromLEOB                = 2;                            { start of block, end of block, }
  428.     kMailFromMark                = 3;                            { or from the current mark }
  429.  
  430.  
  431. TYPE
  432.     MailEnclosureInfo = RECORD
  433.         enclosureName:            StringPtr;
  434.         catInfo:                CInfoPBPtr;
  435.         comment:                StringPtr;
  436.         icon:                    Ptr;
  437.     END;
  438.  
  439. {************************************************************************************}
  440.  
  441. CONST
  442.     kOCESetupLocationNone        = 0;                            { disconnect state }
  443.     kOCESetupLocationMax        = 8;                            { maximum location value }
  444.  
  445.     
  446. TYPE
  447.     OCESetupLocation = CHAR;
  448.  
  449. { location state is a bitmask, 0x1=>1st location active, 
  450.  * 0x2 => 2nd, 0x4 => 3rd, etc.
  451.  }
  452.     MailLocationFlags = CHAR;
  453.  
  454.     MailLocationInfo = RECORD
  455.         location:                OCESetupLocation;
  456.         active:                    SInt8; (* MailLocationFlags *)
  457.     END;
  458.  
  459. {************************************************************************************}
  460. { Definitions for Personal MSAMs }
  461. {************************************************************************************}
  462.  
  463. CONST
  464.     kMailEPPCMsgVersion            = 3;
  465.  
  466.  
  467. TYPE
  468.     MailEPPCMsg = RECORD
  469.         version:                INTEGER;
  470.         CASE INTEGER OF
  471.         0: (
  472.             theSMCA:                    ^SMCA;                                { for 'crsl', 'mdsl', 'dlsl', 'sndi', 'msgo', 'admn' }
  473.            );
  474.         1: (
  475.             sequenceNumber:                LONGINT;                            { for 'inqu', 'dlom' }
  476.            );
  477.         2: (
  478.             locationInfo:                MailLocationInfo;                    { for 'locc' }
  479.            );
  480.     END;
  481.  
  482. { Values of OCE defined High Level Event message classes }
  483.  
  484. CONST
  485.     kMailEPPCCreateSlot            = 'crsl';
  486.     kMailEPPCModifySlot            = 'mdsl';
  487.     kMailEPPCDeleteSlot            = 'dlsl';
  488.     kMailEPPCShutDown            = 'quit';
  489.     kMailEPPCMailboxOpened        = 'mbop';
  490.     kMailEPPCMailboxClosed        = 'mbcl';
  491.     kMailEPPCMsgPending            = 'msgp';
  492.     kMailEPPCSendImmediate        = 'sndi';
  493.     kMailEPPCContinue            = 'cont';
  494.     kMailEPPCSchedule            = 'sked';
  495.     kMailEPPCAdmin                = 'admn';
  496.     kMailEPPCInQUpdate            = 'inqu';
  497.     kMailEPPCMsgOpened            = 'msgo';
  498.     kMailEPPCDeleteOutQMsg        = 'dlom';
  499.     kMailEPPCWakeup                = 'wkup';
  500.     kMailEPPCLocationChanged    = 'locc';
  501.  
  502.  
  503. TYPE
  504.     MailTimer = RECORD
  505.         CASE INTEGER OF
  506.         0: (
  507.             frequency:                    LONGINT;                            { how often to connect }
  508.            );
  509.         1: (
  510.             connectTime:                LONGINT;                            { time since midnight }
  511.            );
  512.     END;
  513.  
  514.  
  515. CONST
  516.     kMailTimerOff                = 0;                            { control is off }
  517.     kMailTimerTime                = 1;                            { specifies connect time (relative to midnight) }
  518.     kMailTimerFrequency            = 2;                            { specifies connect frequency }
  519.  
  520.     
  521. TYPE
  522.     MailTimerKind = Byte;
  523.  
  524.     MailTimers = RECORD
  525.         sendTimeKind:            SInt8; (* MailTimerKind *)                { either kMailTimerTime or kMailTimerFrequency }
  526.         receiveTimeKind:        SInt8; (* MailTimerKind *)                { either kMailTimerTime or kMailTimerFrequency }
  527.         send:                    MailTimer;
  528.         receive:                MailTimer;
  529.     END;
  530.  
  531.     MailStandardSlotInfoAttribute = RECORD
  532.         version:                INTEGER;
  533.         active:                    SInt8; (* MailLocationFlags *)            { active if MailLocationMask(i) is set }
  534.         padByte:                SInt8; (* Byte *)
  535.         sendReceiveTimer:        MailTimers;
  536.     END;
  537.  
  538.     PMSAMGetMSAMRecordPB = RECORD
  539.         qLink:                    Ptr;
  540.         reservedH1:                LONGINT;
  541.         reservedH2:                LONGINT;
  542.         ioCompletion:            MSAMIOCompletionUPP;
  543.         ioResult:                OSErr;
  544.         saveA5:                    LONGINT;
  545.         reqCode:                INTEGER;
  546.         msamCID:                CreationID;
  547.     END;
  548.  
  549.     PMSAMOpenQueuesPB = RECORD
  550.         qLink:                    Ptr;
  551.         reservedH1:                LONGINT;
  552.         reservedH2:                LONGINT;
  553.         ioCompletion:            MSAMIOCompletionUPP;
  554.         ioResult:                OSErr;
  555.         saveA5:                    LONGINT;
  556.         reqCode:                INTEGER;
  557.         inQueueRef:                MSAMQueueRef;
  558.         outQueueRef:            MSAMQueueRef;
  559.         msamSlotID:                MSAMSlotID;
  560.         filler:                    ARRAY [0..1] OF LONGINT;
  561.     END;
  562.  
  563.     PMSAMStatus = INTEGER;
  564.  
  565. { Values of PMSAMStatus }
  566.  
  567. CONST
  568.     kPMSAMStatusPending            = 1;                            { for inQueue and outQueue }
  569.     kPMSAMStatusError            = 2;                            { for inQueue and outQueue }
  570.     kPMSAMStatusSending            = 3;                            { for outQueue only }
  571.     kPMSAMStatusCaching            = 4;                            { for inQueue only }
  572.     kPMSAMStatusSent            = 5;                            { for outQueue only }
  573.  
  574.  
  575. TYPE
  576.     PMSAMSetStatusPB = RECORD
  577.         qLink:                    Ptr;
  578.         reservedH1:                LONGINT;
  579.         reservedH2:                LONGINT;
  580.         ioCompletion:            MSAMIOCompletionUPP;
  581.         ioResult:                OSErr;
  582.         saveA5:                    LONGINT;
  583.         reqCode:                INTEGER;
  584.         queueRef:                MSAMQueueRef;
  585.         seqNum:                    LONGINT;
  586.         msgHint:                LONGINT;                                { for posting cache error,set this to 0 when report outq status }
  587.         status:                    PMSAMStatus;
  588.     END;
  589.  
  590.     PMSAMLogErrorPB = RECORD
  591.         qLink:                    Ptr;
  592.         reservedH1:                LONGINT;
  593.         reservedH2:                LONGINT;
  594.         ioCompletion:            MSAMIOCompletionUPP;
  595.         ioResult:                OSErr;
  596.         saveA5:                    LONGINT;
  597.         reqCode:                INTEGER;
  598.         msamSlotID:                MSAMSlotID;                                { 0 for PMSAM errors }
  599.         logEntry:                ^MailErrorLogEntryInfo;
  600.         filler:                    ARRAY [0..1] OF LONGINT;
  601.     END;
  602.  
  603. {**************************************************************************************}
  604.  
  605. CONST
  606.     kMailMsgSummaryVersion        = 1;
  607.  
  608.  
  609. TYPE
  610.     MailMasterData = RECORD
  611.         attrMask:                MailAttributeBitmap;                    { indicates attributes present in MsgSummary }
  612.         messageID:                MailLetterID;
  613.         replyID:                MailLetterID;
  614.         conversationID:            MailLetterID;
  615.     END;
  616.  
  617. { Values for addressedToMe in struct MailCoreData }
  618.  
  619. CONST
  620.     kAddressedAs_TO                = $1;
  621.     kAddressedAs_CC                = $2;
  622.     kAddressedAs_BCC            = $4;
  623.  
  624.  
  625. TYPE
  626.     MailCoreData = RECORD
  627.         letterFlags:            MailLetterFlags;
  628.         messageSize:            LONGINT;
  629.         letterIndications:        MailIndications;
  630.         messageType:            OCECreatorType;
  631.         sendTime:                MailTime;
  632.         messageFamily:            OSType;
  633.         reserved:                SInt8; (* unsigned char *)
  634.         addressedToMe:            SInt8; (* unsigned char *)
  635.         agentInfo:                ARRAY [0..5] OF CHAR;                    { 6 bytes of special info [set to zero]
  636.     * these are variable length and even padded }
  637.         sender:                    RString32;                                { recipient's entityName (trunc)}
  638.         subject:                RString32;                                { subject maybe truncated }
  639.     END;
  640.  
  641.     MSAMMsgSummary = RECORD
  642.         version:                INTEGER;                                { following flags are defaulted by Toolbox }
  643.         msgDeleted:                BOOLEAN;                                { true if msg is to be deleted by PMSAM }
  644.         msgUpdated:                BOOLEAN;                                { true if msgSummary was updated by MailManager }
  645.         msgCached:                BOOLEAN;                                { true if msg is in the slot's InQueue }
  646.         padByte:                SInt8; (* Byte *)
  647.         masterData:                MailMasterData;
  648.         coreData:                MailCoreData;
  649.     END;
  650.  
  651. { PMSAM can put up to 128 bytes of private msg summary data }
  652.  
  653. CONST
  654.     kMailMaxPMSAMMsgSummaryData    = 128;
  655.  
  656.  
  657. TYPE
  658.     PMSAMCreateMsgSummaryPB = RECORD
  659.         qLink:                    Ptr;
  660.         reservedH1:                LONGINT;
  661.         reservedH2:                LONGINT;
  662.         ioCompletion:            MSAMIOCompletionUPP;
  663.         ioResult:                OSErr;
  664.         saveA5:                    LONGINT;
  665.         reqCode:                INTEGER;
  666.         inQueueRef:                MSAMQueueRef;
  667.         seqNum:                    LONGINT;                                { <- seq of the new message }
  668.         msgSummary:                ^MSAMMsgSummary;                        { attributes and mask filled in }
  669.         buffer:                    ^MailBuffer;                            { PMSAM specific data to be appended }
  670.     END;
  671.  
  672.     PMSAMPutMsgSummaryPB = RECORD
  673.         qLink:                    Ptr;
  674.         reservedH1:                LONGINT;
  675.         reservedH2:                LONGINT;
  676.         ioCompletion:            MSAMIOCompletionUPP;
  677.         ioResult:                OSErr;
  678.         saveA5:                    LONGINT;
  679.         reqCode:                INTEGER;
  680.         inQueueRef:                MSAMQueueRef;
  681.         seqNum:                    LONGINT;
  682.         letterFlags:            ^MailMaskedLetterFlags;                    { if not nil, then set msgStoreFlags }
  683.         buffer:                    ^MailBuffer;                            { PMSAM specific data to be overwritten }
  684.     END;
  685.  
  686.     PMSAMGetMsgSummaryPB = RECORD
  687.         qLink:                    Ptr;
  688.         reservedH1:                LONGINT;
  689.         reservedH2:                LONGINT;
  690.         ioCompletion:            MSAMIOCompletionUPP;
  691.         ioResult:                OSErr;
  692.         saveA5:                    LONGINT;
  693.         reqCode:                INTEGER;
  694.         inQueueRef:                MSAMQueueRef;
  695.         seqNum:                    LONGINT;
  696.         msgSummary:                ^MSAMMsgSummary;                        { if not nil, then read in the msgSummary }
  697.         buffer:                    ^MailBuffer;                            { PMSAM specific data to be read }
  698.         msgSummaryOffset:        INTEGER;                                { offset of PMSAM specific data
  699.                                                from start of MsgSummary }
  700.     END;
  701.  
  702. {**************************************************************************************}
  703. { Definitions for Server MSAMs }
  704. {************************************************************************************}
  705.     SMSAMAdminCode = INTEGER;
  706.  
  707. { Values of SMSAMAdminCode }
  708.  
  709. CONST
  710.     kSMSAMNotifyFwdrSetupChange    = 1;
  711.     kSMSAMNotifyFwdrNameChange    = 2;
  712.     kSMSAMNotifyFwdrPwdChange    = 3;
  713.     kSMSAMGetDynamicFwdrParams    = 4;
  714.  
  715.     
  716. TYPE
  717.     SMSAMSlotChanges = LONGINT;
  718.  
  719.  
  720. CONST
  721.     kSMSAMFwdrHomeInternetChangedBit = 0;
  722.     kSMSAMFwdrConnectedToChangedBit = 1;
  723.     kSMSAMFwdrForeignRLIsChangedBit = 2;
  724.     kSMSAMFwdrMnMServerChangedBit = 3;
  725.  
  726. { Values of SMSAMSlotChanges }
  727.     kSMSAMFwdrEverythingChangedMask = -1;
  728.     kSMSAMFwdrHomeInternetChangedMask = 1 * (2**(kSMSAMFwdrHomeInternetChangedBit));
  729.     kSMSAMFwdrConnectedToChangedMask = 1 * (2**(kSMSAMFwdrConnectedToChangedBit));
  730.     kSMSAMFwdrForeignRLIsChangedMask = 1 * (2**(kSMSAMFwdrForeignRLIsChangedBit));
  731.     kSMSAMFwdrMnMServerChangedMask = 1 * (2**(kSMSAMFwdrMnMServerChangedBit));
  732.  
  733. { kSMSAMNotifyFwdrSetupChange }
  734.  
  735. TYPE
  736.     SMSAMSetupChange = RECORD
  737.         whatChanged:            SMSAMSlotChanges;                        {  --> bitmap of what parameters changed }
  738.         serverHint:                AddrBlock;                                {  --> try this ADAP server first }
  739.     END;
  740.  
  741. { kSMSAMNotifyFwdrNameChange }
  742.     SMSAMNameChange = RECORD
  743.         newName:                RString;                                {  --> msams new name }
  744.         serverHint:                AddrBlock;                                {  --> try this ADAP server first }
  745.     END;
  746.  
  747. { kSMSAMNotifyFwdrPasswordChange }
  748.     SMSAMPasswordChange = RECORD
  749.         newPassword:            RString;                                {  --> msams new password }
  750.         serverHint:                AddrBlock;                                {  --> try this ADAP server first }
  751.     END;
  752.  
  753. { kSMSAMGetDynamicFwdrParams }
  754.     SMSAMDynamicParams = RECORD
  755.         curDiskUsed:            LONGINT;                                { <--  amount of disk space used by msam }
  756.         curMemoryUsed:            LONGINT;                                { <--  amount of memory used by msam }
  757.     END;
  758.  
  759.     SMSAMAdminEPPCRequest = RECORD
  760.         adminCode:                SMSAMAdminCode;
  761.         CASE INTEGER OF
  762.         0: (
  763.             setupChange:                SMSAMSetupChange;
  764.            );
  765.         1: (
  766.             nameChange:                    SMSAMNameChange;
  767.            );
  768.         2: (
  769.             passwordChange:                SMSAMPasswordChange;
  770.            );
  771.         3: (
  772.             dynamicParams:                SMSAMDynamicParams;
  773.            );
  774.     END;
  775.  
  776.     SMSAMSetupPB = RECORD
  777.         qLink:                    Ptr;
  778.         reservedH1:                LONGINT;
  779.         reservedH2:                LONGINT;
  780.         ioCompletion:            MSAMIOCompletionUPP;
  781.         ioResult:                OSErr;
  782.         saveA5:                    LONGINT;
  783.         reqCode:                INTEGER;
  784.         serverMSAM:                RecordIDPtr;
  785.         password:                RStringPtr;
  786.         gatewayType:            OSType;
  787.         gatewayTypeDescription:    RStringPtr;
  788.         catalogServerHint:        AddrBlock;
  789.     END;
  790.  
  791.     SMSAMStartupPB = RECORD
  792.         qLink:                    Ptr;
  793.         reservedH1:                LONGINT;
  794.         reservedH2:                LONGINT;
  795.         ioCompletion:            MSAMIOCompletionUPP;
  796.         ioResult:                OSErr;
  797.         saveA5:                    LONGINT;
  798.         reqCode:                INTEGER;
  799.         msamIdentity:            AuthIdentity;
  800.         queueRef:                MSAMQueueRef;
  801.     END;
  802.  
  803.     SMSAMShutdownPB = RECORD
  804.         qLink:                    Ptr;
  805.         reservedH1:                LONGINT;
  806.         reservedH2:                LONGINT;
  807.         ioCompletion:            MSAMIOCompletionUPP;
  808.         ioResult:                OSErr;
  809.         saveA5:                    LONGINT;
  810.         reqCode:                INTEGER;
  811.         queueRef:                MSAMQueueRef;
  812.     END;
  813.  
  814. {**************************************************************************************}
  815. { Definitions for reading and writing MSAM Letters }
  816. {**************************************************************************************}
  817.     MSAMEnumeratePB = RECORD
  818.         qLink:                    Ptr;
  819.         reservedH1:                LONGINT;
  820.         reservedH2:                LONGINT;
  821.         ioCompletion:            MSAMIOCompletionUPP;
  822.         ioResult:                OSErr;
  823.         saveA5:                    LONGINT;
  824.         reqCode:                INTEGER;
  825.         queueRef:                MSAMQueueRef;
  826.         startSeqNum:            LONGINT;
  827.         nextSeqNum:                LONGINT;
  828.         { buffer contains a Mail Reply. Each tuple is a 
  829.     MSAMEnumerateInQReply when enumerating the inQueue
  830.     MSAMEnumerateOutQReply when enumerating the outQueue }
  831.         buffer:                    MailBuffer;
  832.     END;
  833.  
  834.     MSAMEnumerateInQReply = RECORD
  835.         seqNum:                    LONGINT;
  836.         msgDeleted:                BOOLEAN;                                { true if msg is to be deleted by PMSAM }
  837.         msgUpdated:                BOOLEAN;                                { true if MsgSummary has been updated by TB }
  838.         msgCached:                BOOLEAN;                                { true if msg is in the incoming queue }
  839.         padByte:                SInt8; (* Byte *)
  840.     END;
  841.  
  842.     MSAMEnumerateOutQReply = RECORD
  843.         seqNum:                    LONGINT;
  844.         done:                    BOOLEAN;                                { true if all responsible recipients have been processed }
  845.         priority:                IPMPriority;
  846.         msgFamily:                OSType;
  847.         approxSize:                LONGINT;
  848.         tunnelForm:                BOOLEAN;                                { true if this letter has to be tunnelled }
  849.         padByte:                SInt8; (* Byte *)
  850.         nextHop:                NetworkSpec;                            { valid if tunnelForm is true }
  851.         msgType:                OCECreatorType;
  852.     END;
  853.  
  854.     MSAMDeletePB = RECORD
  855.         qLink:                    Ptr;
  856.         reservedH1:                LONGINT;
  857.         reservedH2:                LONGINT;
  858.         ioCompletion:            MSAMIOCompletionUPP;
  859.         ioResult:                OSErr;
  860.         saveA5:                    LONGINT;
  861.         reqCode:                INTEGER;
  862.         queueRef:                MSAMQueueRef;
  863.         seqNum:                    LONGINT;
  864.         msgOnly:                BOOLEAN;                                { only valid for PMSAM & inQueue }
  865.         { set true to delete message but not msgSummary }
  866.         padByte:                SInt8; (* Byte *)
  867.         { only valid for SMSAM & tunnelled messages }
  868.         result:                    OSErr;
  869.     END;
  870.  
  871.     MSAMOpenPB = RECORD
  872.         qLink:                    Ptr;
  873.         reservedH1:                LONGINT;
  874.         reservedH2:                LONGINT;
  875.         ioCompletion:            MSAMIOCompletionUPP;
  876.         ioResult:                OSErr;
  877.         saveA5:                    LONGINT;
  878.         reqCode:                INTEGER;
  879.         queueRef:                MSAMQueueRef;
  880.         seqNum:                    LONGINT;
  881.         mailMsgRef:                MailMsgRef;
  882.     END;
  883.  
  884.     MSAMOpenNestedPB = RECORD
  885.         qLink:                    Ptr;
  886.         reservedH1:                LONGINT;
  887.         reservedH2:                LONGINT;
  888.         ioCompletion:            MSAMIOCompletionUPP;
  889.         ioResult:                OSErr;
  890.         saveA5:                    LONGINT;
  891.         reqCode:                INTEGER;
  892.         mailMsgRef:                MailMsgRef;
  893.         nestedRef:                MailMsgRef;
  894.     END;
  895.  
  896.     MSAMClosePB = RECORD
  897.         qLink:                    Ptr;
  898.         reservedH1:                LONGINT;
  899.         reservedH2:                LONGINT;
  900.         ioCompletion:            MSAMIOCompletionUPP;
  901.         ioResult:                OSErr;
  902.         saveA5:                    LONGINT;
  903.         reqCode:                INTEGER;
  904.         mailMsgRef:                MailMsgRef;
  905.     END;
  906.  
  907.     MSAMGetMsgHeaderPB = RECORD
  908.         qLink:                    Ptr;
  909.         reservedH1:                LONGINT;
  910.         reservedH2:                LONGINT;
  911.         ioCompletion:            MSAMIOCompletionUPP;
  912.         ioResult:                OSErr;
  913.         saveA5:                    LONGINT;
  914.         reqCode:                INTEGER;
  915.         mailMsgRef:                MailMsgRef;
  916.         selector:                SInt8; (* IPMHeaderSelector *)
  917.         filler1:                BOOLEAN;
  918.         offset:                    LONGINT;
  919.         buffer:                    MailBuffer;
  920.         remaining:                LONGINT;
  921.     END;
  922.  
  923.     MSAMGetAttributesPB = RECORD
  924.         qLink:                    Ptr;
  925.         reservedH1:                LONGINT;
  926.         reservedH2:                LONGINT;
  927.         ioCompletion:            MSAMIOCompletionUPP;
  928.         ioResult:                OSErr;
  929.         saveA5:                    LONGINT;
  930.         reqCode:                INTEGER;
  931.         mailMsgRef:                MailMsgRef;
  932.         requestMask:            MailAttributeBitmap;                    { kMailIndicationsBit thru kMailSubjectBit }
  933.         buffer:                    MailBuffer;
  934.         {    buffer returned will contain the attribute values of 
  935.         the attributes indicated in responseMask, 
  936.         from the attribute indicated by the least significant bit set
  937.         to the attribute indicated by the most significant bit set.
  938.         Note that recipients - from, to, cc, bcc cannot be read using
  939.         this call. Use GetRecipients to read these. }
  940.         responseMask:            MailAttributeBitmap;
  941.         more:                    BOOLEAN;
  942.         filler1:                BOOLEAN;
  943.     END;
  944.  
  945. { attrID value to get resolved recipient list }
  946.  
  947. CONST
  948.     kMailResolvedList            = 0;
  949.  
  950.  
  951. TYPE
  952.     MailOriginalRecipient = RECORD
  953.         index:                    INTEGER;
  954.     END;
  955.  
  956. { Followed by OCEPackedRecipient }
  957.     MailResolvedRecipient = RECORD
  958.         index:                    INTEGER;
  959.         recipientFlags:            INTEGER;
  960.         responsible:            BOOLEAN;
  961.         padByte:                SInt8; (* Byte *)
  962.     END;
  963.  
  964. { Followed by OCEPackedRecipient }
  965.     MSAMGetRecipientsPB = RECORD
  966.         qLink:                    Ptr;
  967.         reservedH1:                LONGINT;
  968.         reservedH2:                LONGINT;
  969.         ioCompletion:            MSAMIOCompletionUPP;
  970.         ioResult:                OSErr;
  971.         saveA5:                    LONGINT;
  972.         reqCode:                INTEGER;
  973.         mailMsgRef:                MailMsgRef;
  974.         attrID:                    MailAttributeID;                        { kMailFromBit thru kMailBccBit }
  975.         startIndex:                INTEGER;                                { starts at 1 }
  976.         buffer:                    MailBuffer;
  977.         {     buffer contains a Mail Reply. Each tuple is a
  978.         MailOriginalRecipient if getting original recipients 
  979.                                 ie the attrID is kMail[From, To, Cc, Bcc]Bit
  980.         MailResolvedRecipient if getting resolved reicpients
  981.                                 ie the attrID is kMailResolvedList
  982.         Both tuples are word alligned.  }
  983.         nextIndex:                INTEGER;
  984.         more:                    BOOLEAN;
  985.         filler1:                BOOLEAN;
  986.     END;
  987.  
  988.     MSAMGetContentPB = RECORD
  989.         qLink:                    Ptr;
  990.         reservedH1:                LONGINT;
  991.         reservedH2:                LONGINT;
  992.         ioCompletion:            MSAMIOCompletionUPP;
  993.         ioResult:                OSErr;
  994.         saveA5:                    LONGINT;
  995.         reqCode:                INTEGER;
  996.         mailMsgRef:                MailMsgRef;
  997.         segmentMask:            MailSegmentMask;
  998.         buffer:                    MailBuffer;
  999.         textScrap:                ^StScrpRec;
  1000.         script:                    ScriptCode;
  1001.         segmentType:            MailSegmentType;
  1002.         endOfScript:            BOOLEAN;
  1003.         endOfSegment:            BOOLEAN;
  1004.         endOfContent:            BOOLEAN;
  1005.         filler1:                BOOLEAN;
  1006.         segmentLength:            LONGINT;                                { NEW: <-  valid first call in a segment }
  1007.         segmentID:                LONGINT;                                { NEW: <-> identifier for this segment }
  1008.     END;
  1009.  
  1010.     MSAMGetEnclosurePB = RECORD
  1011.         qLink:                    Ptr;
  1012.         reservedH1:                LONGINT;
  1013.         reservedH2:                LONGINT;
  1014.         ioCompletion:            MSAMIOCompletionUPP;
  1015.         ioResult:                OSErr;
  1016.         saveA5:                    LONGINT;
  1017.         reqCode:                INTEGER;
  1018.         mailMsgRef:                MailMsgRef;
  1019.         contentEnclosure:        BOOLEAN;
  1020.         padByte:                SInt8; (* Byte *)
  1021.         buffer:                    MailBuffer;
  1022.         endOfFile:                BOOLEAN;
  1023.         endOfEnclosures:        BOOLEAN;
  1024.     END;
  1025.  
  1026.     MailBlockInfo = RECORD
  1027.         blockType:                OCECreatorType;
  1028.         offset:                    LONGINT;
  1029.         blockLength:            LONGINT;
  1030.     END;
  1031.  
  1032.     MSAMEnumerateBlocksPB = RECORD
  1033.         qLink:                    Ptr;
  1034.         reservedH1:                LONGINT;
  1035.         reservedH2:                LONGINT;
  1036.         ioCompletion:            MSAMIOCompletionUPP;
  1037.         ioResult:                OSErr;
  1038.         saveA5:                    LONGINT;
  1039.         reqCode:                INTEGER;
  1040.         mailMsgRef:                MailMsgRef;
  1041.         startIndex:                INTEGER;                                { starts at 1 }
  1042.         buffer:                    MailBuffer;
  1043.         {     buffer contains a Mail Reply. Each tuple is a MailBlockInfo }
  1044.         nextIndex:                INTEGER;
  1045.         more:                    BOOLEAN;
  1046.         filler1:                BOOLEAN;
  1047.     END;
  1048.  
  1049.     MSAMGetBlockPB = RECORD
  1050.         qLink:                    Ptr;
  1051.         reservedH1:                LONGINT;
  1052.         reservedH2:                LONGINT;
  1053.         ioCompletion:            MSAMIOCompletionUPP;
  1054.         ioResult:                OSErr;
  1055.         saveA5:                    LONGINT;
  1056.         reqCode:                INTEGER;
  1057.         mailMsgRef:                MailMsgRef;
  1058.         blockType:                OCECreatorType;
  1059.         blockIndex:                INTEGER;
  1060.         buffer:                    MailBuffer;
  1061.         dataOffset:                LONGINT;
  1062.         endOfBlock:                BOOLEAN;
  1063.         padByte:                SInt8; (* Byte *)
  1064.         remaining:                LONGINT;
  1065.     END;
  1066.  
  1067. { YOU SHOULD BE USING THE NEW FORM OF MARK RECIPIENTS
  1068.  * THIS VERSION IS MUCH SLOWER AND KEPT FOR COMPATIBILITY
  1069.  * REASONS.
  1070. }
  1071. { not valid for tunnel form letters }
  1072.     MSAMMarkRecipientsPB = RECORD
  1073.         qLink:                    Ptr;
  1074.         reservedH1:                LONGINT;
  1075.         reservedH2:                LONGINT;
  1076.         ioCompletion:            MSAMIOCompletionUPP;
  1077.         ioResult:                OSErr;
  1078.         saveA5:                    LONGINT;
  1079.         reqCode:                INTEGER;
  1080.         queueRef:                MSAMQueueRef;
  1081.         seqNum:                    LONGINT;
  1082.         {     buffer contains a Mail Reply. Each tuple is an unsigned short,
  1083.         the index of a recipient to be marked. }
  1084.         buffer:                    MailBuffer;
  1085.     END;
  1086.  
  1087.  * same as MSAMMarkRecipients except it takes a mailMsgRef instead of 
  1088.  * queueRef, seqNum 
  1089. }
  1090. { not valid for tunnel form letters }
  1091.     MSAMnMarkRecipientsPB = RECORD
  1092.         qLink:                    Ptr;
  1093.         reservedH1:                LONGINT;
  1094.         reservedH2:                LONGINT;
  1095.         ioCompletion:            MSAMIOCompletionUPP;
  1096.         ioResult:                OSErr;
  1097.         saveA5:                    LONGINT;
  1098.         reqCode:                INTEGER;
  1099.         mailMsgRef:                MailMsgRef;
  1100.         {     buffer contains a Mail Reply. Each tuple is an unsigned short,
  1101.         the index of a recipient to be marked. }
  1102.         buffer:                    MailBuffer;
  1103.     END;
  1104.  
  1105. {**************************************************************************************}
  1106.     MSAMCreatePB = RECORD
  1107.         qLink:                    Ptr;
  1108.         reservedH1:                LONGINT;
  1109.         reservedH2:                LONGINT;
  1110.         ioCompletion:            MSAMIOCompletionUPP;
  1111.         ioResult:                OSErr;
  1112.         saveA5:                    LONGINT;
  1113.         reqCode:                INTEGER;
  1114.         queueRef:                MSAMQueueRef;
  1115.         asLetter:                BOOLEAN;                                { indicate if we should create as letter or msg }
  1116.         filler1:                BOOLEAN;
  1117.         msgType:                IPMMsgType;                                { up to application discretion: must be of IPMSenderTag
  1118.                                            kIPMOSFormatType for asLetter=true }
  1119.         refCon:                    LONGINT;                                { for messages only }
  1120.         seqNum:                    LONGINT;                                { set if creating message in the inQueue }
  1121.         tunnelForm:                BOOLEAN;                                { if true tunnelForm else newForm }
  1122.         bccRecipients:            BOOLEAN;                                { true if creating letter with bcc recipients }
  1123.         newRef:                    MailMsgRef;
  1124.     END;
  1125.  
  1126.     MSAMBeginNestedPB = RECORD
  1127.         qLink:                    Ptr;
  1128.         reservedH1:                LONGINT;
  1129.         reservedH2:                LONGINT;
  1130.         ioCompletion:            MSAMIOCompletionUPP;
  1131.         ioResult:                OSErr;
  1132.         saveA5:                    LONGINT;
  1133.         reqCode:                INTEGER;
  1134.         mailMsgRef:                MailMsgRef;
  1135.         refCon:                    LONGINT;                                { for messages only }
  1136.         msgType:                IPMMsgType;
  1137.     END;
  1138.  
  1139.     MSAMEndNestedPB = RECORD
  1140.         qLink:                    Ptr;
  1141.         reservedH1:                LONGINT;
  1142.         reservedH2:                LONGINT;
  1143.         ioCompletion:            MSAMIOCompletionUPP;
  1144.         ioResult:                OSErr;
  1145.         saveA5:                    LONGINT;
  1146.         reqCode:                INTEGER;
  1147.         mailMsgRef:                MailMsgRef;
  1148.     END;
  1149.  
  1150.     MSAMSubmitPB = RECORD
  1151.         qLink:                    Ptr;
  1152.         reservedH1:                LONGINT;
  1153.         reservedH2:                LONGINT;
  1154.         ioCompletion:            MSAMIOCompletionUPP;
  1155.         ioResult:                OSErr;
  1156.         saveA5:                    LONGINT;
  1157.         reqCode:                INTEGER;
  1158.         mailMsgRef:                MailMsgRef;
  1159.         submitFlag:                BOOLEAN;
  1160.         padByte:                SInt8; (* Byte *)
  1161.         msgID:                    MailLetterID;
  1162.     END;
  1163.  
  1164.     MSAMPutMsgHeaderPB = RECORD
  1165.         qLink:                    Ptr;
  1166.         reservedH1:                LONGINT;
  1167.         reservedH2:                LONGINT;
  1168.         ioCompletion:            MSAMIOCompletionUPP;
  1169.         ioResult:                OSErr;
  1170.         saveA5:                    LONGINT;
  1171.         reqCode:                INTEGER;
  1172.         mailMsgRef:                MailMsgRef;
  1173.         replyQueue:                ^OCERecipient;
  1174.         sender:                    ^IPMSender;
  1175.         deliveryNotification:    IPMNotificationType;
  1176.         priority:                IPMPriority;
  1177.     END;
  1178.  
  1179.     MSAMPutAttributePB = RECORD
  1180.         qLink:                    Ptr;
  1181.         reservedH1:                LONGINT;
  1182.         reservedH2:                LONGINT;
  1183.         ioCompletion:            MSAMIOCompletionUPP;
  1184.         ioResult:                OSErr;
  1185.         saveA5:                    LONGINT;
  1186.         reqCode:                INTEGER;
  1187.         mailMsgRef:                MailMsgRef;
  1188.         attrID:                    MailAttributeID;                        { kMailIndicationsBit thru kMailSubjectBit }
  1189.         buffer:                    MailBuffer;
  1190.     END;
  1191.  
  1192.     MSAMPutRecipientPB = RECORD
  1193.         qLink:                    Ptr;
  1194.         reservedH1:                LONGINT;
  1195.         reservedH2:                LONGINT;
  1196.         ioCompletion:            MSAMIOCompletionUPP;
  1197.         ioResult:                OSErr;
  1198.         saveA5:                    LONGINT;
  1199.         reqCode:                INTEGER;
  1200.         mailMsgRef:                MailMsgRef;
  1201.         attrID:                    MailAttributeID;                        { kMailFromBit thru kMailBccBit }
  1202.         recipient:                ^MailRecipient;
  1203.         responsible:            BOOLEAN;                                { valid for server and message msams only }
  1204.         filler1:                BOOLEAN;
  1205.     END;
  1206.  
  1207.     MSAMPutContentPB = RECORD
  1208.         qLink:                    Ptr;
  1209.         reservedH1:                LONGINT;
  1210.         reservedH2:                LONGINT;
  1211.         ioCompletion:            MSAMIOCompletionUPP;
  1212.         ioResult:                OSErr;
  1213.         saveA5:                    LONGINT;
  1214.         reqCode:                INTEGER;
  1215.         mailMsgRef:                MailMsgRef;
  1216.         segmentType:            MailSegmentType;
  1217.         append:                    BOOLEAN;
  1218.         padByte:                SInt8; (* Byte *)
  1219.         buffer:                    MailBuffer;
  1220.         textScrap:                ^StScrpRec;
  1221.         startNewScript:            BOOLEAN;
  1222.         filler1:                BOOLEAN;
  1223.         script:                    ScriptCode;                                { valid only if startNewScript is true }
  1224.     END;
  1225.  
  1226.     MSAMPutEnclosurePB = RECORD
  1227.         qLink:                    Ptr;
  1228.         reservedH1:                LONGINT;
  1229.         reservedH2:                LONGINT;
  1230.         ioCompletion:            MSAMIOCompletionUPP;
  1231.         ioResult:                OSErr;
  1232.         saveA5:                    LONGINT;
  1233.         reqCode:                INTEGER;
  1234.         mailMsgRef:                MailMsgRef;
  1235.         contentEnclosure:        BOOLEAN;
  1236.         padByte:                SInt8; (* Byte *)
  1237.         hfs:                    BOOLEAN;                                { true => in file system, false => in memory }
  1238.         append:                    BOOLEAN;
  1239.         buffer:                    MailBuffer;                                { Unused if hfs == true }
  1240.         enclosure:                FSSpec;
  1241.         addlInfo:                MailEnclosureInfo;
  1242.     END;
  1243.  
  1244.     MSAMPutBlockPB = RECORD
  1245.         qLink:                    Ptr;
  1246.         reservedH1:                LONGINT;
  1247.         reservedH2:                LONGINT;
  1248.         ioCompletion:            MSAMIOCompletionUPP;
  1249.         ioResult:                OSErr;
  1250.         saveA5:                    LONGINT;
  1251.         reqCode:                INTEGER;
  1252.         mailMsgRef:                MailMsgRef;
  1253.         refCon:                    LONGINT;                                { for messages only }
  1254.         blockType:                OCECreatorType;
  1255.         append:                    BOOLEAN;
  1256.         filler1:                BOOLEAN;
  1257.         buffer:                    MailBuffer;
  1258.         mode:                    MailBlockMode;                            { if blockType is kMailTunnelLtrType or kMailHopInfoType
  1259.                                        mode is assumed to be kMailFromMark }
  1260.         offset:                    LONGINT;
  1261.     END;
  1262.  
  1263. {**************************************************************************************}
  1264.     MSAMCreateReportPB = RECORD
  1265.         qLink:                    Ptr;
  1266.         reservedH1:                LONGINT;
  1267.         reservedH2:                LONGINT;
  1268.         ioCompletion:            MSAMIOCompletionUPP;
  1269.         ioResult:                OSErr;
  1270.         saveA5:                    LONGINT;
  1271.         reqCode:                INTEGER;
  1272.         queueRef:                MSAMQueueRef;                            { to distinguish personal and server MSAMs }
  1273.         mailMsgRef:                MailMsgRef;
  1274.         msgID:                    MailLetterID;                            { kMailLetterIDBit of letter being reported upon }
  1275.         sender:                    ^MailRecipient;                            { sender of the letter you are creating report on }
  1276.     END;
  1277.  
  1278.     MSAMPutRecipientReportPB = RECORD
  1279.         qLink:                    Ptr;
  1280.         reservedH1:                LONGINT;
  1281.         reservedH2:                LONGINT;
  1282.         ioCompletion:            MSAMIOCompletionUPP;
  1283.         ioResult:                OSErr;
  1284.         saveA5:                    LONGINT;
  1285.         reqCode:                INTEGER;
  1286.         mailMsgRef:                MailMsgRef;
  1287.         recipientIndex:            INTEGER;                                { recipient index in the original letter }
  1288.         result:                    OSErr;                                    { result of sending the recipient }
  1289.     END;
  1290.  
  1291. {**************************************************************************************}
  1292.     MailWakeupPMSAMPB = RECORD
  1293.         qLink:                    Ptr;
  1294.         reservedH1:                LONGINT;
  1295.         reservedH2:                LONGINT;
  1296.         ioCompletion:            MSAMIOCompletionUPP;
  1297.         ioResult:                OSErr;
  1298.         saveA5:                    LONGINT;
  1299.         reqCode:                INTEGER;
  1300.         pmsamCID:                CreationID;
  1301.         mailSlotID:                MailSlotID;
  1302.     END;
  1303.  
  1304.     MailCreateMailSlotPB = RECORD
  1305.         qLink:                    Ptr;
  1306.         reservedH1:                LONGINT;
  1307.         reservedH2:                LONGINT;
  1308.         ioCompletion:            MSAMIOCompletionUPP;
  1309.         ioResult:                OSErr;
  1310.         saveA5:                    LONGINT;
  1311.         reqCode:                INTEGER;
  1312.         mailboxRef:                MailboxRef;
  1313.         timeout:                LONGINT;
  1314.         pmsamCID:                CreationID;
  1315.         smca:                    SMCA;
  1316.     END;
  1317.  
  1318.     MailModifyMailSlotPB = RECORD
  1319.         qLink:                    Ptr;
  1320.         reservedH1:                LONGINT;
  1321.         reservedH2:                LONGINT;
  1322.         ioCompletion:            MSAMIOCompletionUPP;
  1323.         ioResult:                OSErr;
  1324.         saveA5:                    LONGINT;
  1325.         reqCode:                INTEGER;
  1326.         mailboxRef:                MailboxRef;
  1327.         timeout:                LONGINT;
  1328.         pmsamCID:                CreationID;
  1329.         smca:                    SMCA;
  1330.     END;
  1331.  
  1332. {**************************************************************************************}
  1333.  
  1334. CONST
  1335.     kPMSAMGetMSAMRecord            = 1286;
  1336.     kPMSAMOpenQueues            = 1280;
  1337.     kPMSAMLogError                = 1313;
  1338.     kPMSAMSetStatus                = 1319;
  1339.     kPMSAMCreateMsgSummary        = 1314;
  1340.     kPMSAMPutMsgSummary            = 1317;
  1341.     kPMSAMGetMsgSummary            = 1318;
  1342.     kMailWakeupPMSAM            = 1287;
  1343.     kSMSAMSetup                    = 1315;
  1344.     kSMSAMStartup                = 1281;
  1345.     kSMSAMShutdown                = 1282;
  1346.     kMSAMEnumerate                = 1283;
  1347.     kMSAMDelete                    = 1284;
  1348.     kMSAMOpen                    = 1288;
  1349.     kMSAMOpenNested                = 1289;
  1350.     kMSAMClose                    = 1290;
  1351.     kMSAMGetMsgHeader            = 1297;
  1352.     kMSAMnMarkRecipients        = 1298;
  1353.     kMSAMGetAttributes            = 1291;
  1354.     kMSAMGetRecipients            = 1292;
  1355.     kMSAMGetContent                = 1293;
  1356.     kMSAMGetEnclosure            = 1294;
  1357.     kMSAMEnumerateBlocks        = 1295;
  1358.     kMSAMGetBlock                = 1296;
  1359.     kMSAMMarkRecipients            = 1285;
  1360.     kMSAMCreate                    = 1300;
  1361.     kMSAMBeginNested            = 1301;
  1362.     kMSAMEndNested                = 1302;
  1363.     kMSAMSubmit                    = 1303;
  1364.     kMSAMPutMsgHeader            = 1309;
  1365.     kMSAMPutAttribute            = 1304;
  1366.     kMSAMPutRecipient            = 1305;
  1367.     kMSAMPutContent                = 1306;
  1368.     kMSAMPutEnclosure            = 1307;
  1369.     kMSAMPutBlock                = 1308;
  1370.     kMSAMCreateReport            = 1311;
  1371.     kMSAMPutRecipientReport        = 1312;
  1372.     kMailCreateMailSlot            = 1323;
  1373.     kMailModifyMailSlot            = 1324;
  1374.  
  1375.  
  1376. TYPE
  1377.     MSAMParam = RECORD
  1378.         CASE INTEGER OF
  1379.         0: (
  1380.             qLink:                        Ptr;
  1381.             reservedH1:                    LONGINT;
  1382.             reservedH2:                    LONGINT;
  1383.             ioCompletion:                MSAMIOCompletionUPP;
  1384.             ioResult:                    OSErr;
  1385.             saveA5:                        LONGINT;
  1386.             reqCode:                    INTEGER;
  1387.            );
  1388.         1: (
  1389.             pmsamGetMSAMRecord:            PMSAMGetMSAMRecordPB;
  1390.            );
  1391.         2: (
  1392.             pmsamOpenQueues:            PMSAMOpenQueuesPB;
  1393.            );
  1394.         3: (
  1395.             pmsamSetStatus:                PMSAMSetStatusPB;
  1396.            );
  1397.         4: (
  1398.             pmsamLogError:                PMSAMLogErrorPB;
  1399.            );
  1400.         5: (
  1401.             smsamSetup:                    SMSAMSetupPB;
  1402.            );
  1403.         6: (
  1404.             smsamStartup:                SMSAMStartupPB;
  1405.            );
  1406.         7: (
  1407.             smsamShutdown:                SMSAMShutdownPB;
  1408.            );
  1409.         8: (
  1410.             msamEnumerate:                MSAMEnumeratePB;
  1411.            );
  1412.         9: (
  1413.             msamDelete:                    MSAMDeletePB;
  1414.            );
  1415.         10: (
  1416.             msamOpen:                    MSAMOpenPB;
  1417.            );
  1418.         11: (
  1419.             msamOpenNested:                MSAMOpenNestedPB;
  1420.            );
  1421.         12: (
  1422.             msamClose:                    MSAMClosePB;
  1423.            );
  1424.         13: (
  1425.             msamGetMsgHeader:            MSAMGetMsgHeaderPB;
  1426.            );
  1427.         14: (
  1428.             msamGetAttributes:            MSAMGetAttributesPB;
  1429.            );
  1430.         15: (
  1431.             msamGetRecipients:            MSAMGetRecipientsPB;
  1432.            );
  1433.         16: (
  1434.             msamGetContent:                MSAMGetContentPB;
  1435.            );
  1436.         17: (
  1437.             msamGetEnclosure:            MSAMGetEnclosurePB;
  1438.            );
  1439.         18: (
  1440.             msamEnumerateBlocks:        MSAMEnumerateBlocksPB;
  1441.            );
  1442.         19: (
  1443.             msamGetBlock:                MSAMGetBlockPB;
  1444.            );
  1445.         20: (
  1446.             msamMarkRecipients:            MSAMMarkRecipientsPB;
  1447.            );
  1448.         21: (
  1449.             msamnMarkRecipients:        MSAMnMarkRecipientsPB;
  1450.            );
  1451.         22: (
  1452.             msamCreate:                    MSAMCreatePB;
  1453.            );
  1454.         23: (
  1455.             msamBeginNested:            MSAMBeginNestedPB;
  1456.            );
  1457.         24: (
  1458.             msamEndNested:                MSAMEndNestedPB;
  1459.            );
  1460.         25: (
  1461.             msamSubmit:                    MSAMSubmitPB;
  1462.            );
  1463.         26: (
  1464.             msamPutMsgHeader:            MSAMPutMsgHeaderPB;
  1465.            );
  1466.         27: (
  1467.             msamPutAttribute:            MSAMPutAttributePB;
  1468.            );
  1469.         28: (
  1470.             msamPutRecipient:            MSAMPutRecipientPB;
  1471.            );
  1472.         29: (
  1473.             msamPutContent:                MSAMPutContentPB;
  1474.            );
  1475.         30: (
  1476.             msamPutEnclosure:            MSAMPutEnclosurePB;
  1477.            );
  1478.         31: (
  1479.             msamPutBlock:                MSAMPutBlockPB;
  1480.            );
  1481.         32: (
  1482.             msamCreateReport:            MSAMCreateReportPB;                    { Reports and Error Handling Calls }
  1483.            );
  1484.         33: (
  1485.             msamPutRecipientReport:        MSAMPutRecipientReportPB;
  1486.            );
  1487.         34: (
  1488.             pmsamCreateMsgSummary:        PMSAMCreateMsgSummaryPB;
  1489.            );
  1490.         35: (
  1491.             pmsamPutMsgSummary:            PMSAMPutMsgSummaryPB;
  1492.            );
  1493.         36: (
  1494.             pmsamGetMsgSummary:            PMSAMGetMsgSummaryPB;
  1495.            );
  1496.         37: (
  1497.             wakeupPMSAM:                MailWakeupPMSAMPB;
  1498.            );
  1499.         38: (
  1500.             createMailSlot:                MailCreateMailSlotPB;
  1501.            );
  1502.         39: (
  1503.             modifyMailSlot:                MailModifyMailSlotPB;
  1504.            );
  1505.     END;
  1506.  
  1507. CONST
  1508.     uppMSAMIOCompletionProcInfo = $000000C0; { PROCEDURE (4 byte param); }
  1509.  
  1510. PROCEDURE CallMSAMIOCompletionProc(VAR paramBlock: MSAMParam; userRoutine: MSAMIOCompletionUPP);
  1511.     {$IFC NOT GENERATINGCFM}
  1512.     INLINE $205F, $4E90;
  1513.     {$ENDC}
  1514.  
  1515. FUNCTION NewMSAMIOCompletionProc(userRoutine: MSAMIOCompletionProcPtr): MSAMIOCompletionUPP;
  1516.     {$IFC NOT GENERATINGCFM }
  1517.     INLINE $2E9F;
  1518.     {$ENDC}
  1519.  
  1520. FUNCTION MailCreateMailSlot(VAR paramBlock: MSAMParam): OSErr;
  1521.     {$IFC NOT GENERATINGCFM}
  1522.     INLINE $7001, $1f00, $3f3c, 1323, $AA5E;
  1523.     {$ENDC}
  1524. { ASYNCHRONOUS ONLY, client must call WaitNextEvent }
  1525. FUNCTION MailModifyMailSlot(VAR paramBlock: MSAMParam): OSErr;
  1526.     {$IFC NOT GENERATINGCFM}
  1527.     INLINE $7001, $1f00, $3f3c, 1324, $AA5E;
  1528.     {$ENDC}
  1529. { ASYNCHRONOUS ONLY, client must call WaitNextEvent }
  1530. FUNCTION MailWakeupPMSAM(VAR paramBlock: MSAMParam): OSErr;
  1531.     {$IFC NOT GENERATINGCFM}
  1532.     INLINE $7001, $1f00, $3f3c, 1287, $AA5E;
  1533.     {$ENDC}
  1534. { Personal MSAM Glue Routines }
  1535. FUNCTION PMSAMOpenQueues(VAR paramBlock: MSAMParam): OSErr;
  1536.     {$IFC NOT GENERATINGCFM}
  1537.     INLINE $7000, $1f00, $3f3c, 1280, $AA5E;
  1538.     {$ENDC}
  1539. FUNCTION PMSAMSetStatus(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1540.     {$IFC NOT GENERATINGCFM}
  1541.     INLINE $3f3c, 1319, $AA5E;
  1542.     {$ENDC}
  1543. { SYNC ONLY }
  1544. FUNCTION PMSAMGetMSAMRecord(VAR paramBlock: MSAMParam): OSErr;
  1545.     {$IFC NOT GENERATINGCFM}
  1546.     INLINE $7000, $1f00, $3f3c, 1286, $AA5E;
  1547.     {$ENDC}
  1548. { Server MSAM Glue Routines }
  1549. { SYNC ONLY }
  1550. FUNCTION SMSAMSetup(VAR paramBlock: MSAMParam): OSErr;
  1551.     {$IFC NOT GENERATINGCFM}
  1552.     INLINE $7000, $1f00, $3f3c, 1315, $AA5E;
  1553.     {$ENDC}
  1554. { SYNC ONLY }
  1555. FUNCTION SMSAMStartup(VAR paramBlock: MSAMParam): OSErr;
  1556.     {$IFC NOT GENERATINGCFM}
  1557.     INLINE $7000, $1f00, $3f3c, 1281, $AA5E;
  1558.     {$ENDC}
  1559. FUNCTION SMSAMShutdown(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1560.     {$IFC NOT GENERATINGCFM}
  1561.     INLINE $3f3c, 1282, $AA5E;
  1562.     {$ENDC}
  1563. { Get Interface Glue Routines }
  1564. FUNCTION MSAMEnumerate(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1565.     {$IFC NOT GENERATINGCFM}
  1566.     INLINE $3f3c, 1283, $AA5E;
  1567.     {$ENDC}
  1568. FUNCTION MSAMDelete(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1569.     {$IFC NOT GENERATINGCFM}
  1570.     INLINE $3f3c, 1284, $AA5E;
  1571.     {$ENDC}
  1572. FUNCTION MSAMMarkRecipients(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1573.     {$IFC NOT GENERATINGCFM}
  1574.     INLINE $3f3c, 1285, $AA5E;
  1575.     {$ENDC}
  1576. FUNCTION MSAMnMarkRecipients(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1577.     {$IFC NOT GENERATINGCFM}
  1578.     INLINE $3f3c, 1298, $AA5E;
  1579.     {$ENDC}
  1580. FUNCTION MSAMOpen(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1581.     {$IFC NOT GENERATINGCFM}
  1582.     INLINE $3f3c, 1288, $AA5E;
  1583.     {$ENDC}
  1584. FUNCTION MSAMOpenNested(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1585.     {$IFC NOT GENERATINGCFM}
  1586.     INLINE $3f3c, 1289, $AA5E;
  1587.     {$ENDC}
  1588. FUNCTION MSAMClose(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1589.     {$IFC NOT GENERATINGCFM}
  1590.     INLINE $3f3c, 1290, $AA5E;
  1591.     {$ENDC}
  1592. FUNCTION MSAMGetRecipients(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1593.     {$IFC NOT GENERATINGCFM}
  1594.     INLINE $3f3c, 1292, $AA5E;
  1595.     {$ENDC}
  1596. FUNCTION MSAMGetAttributes(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1597.     {$IFC NOT GENERATINGCFM}
  1598.     INLINE $3f3c, 1291, $AA5E;
  1599.     {$ENDC}
  1600. FUNCTION MSAMGetContent(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1601.     {$IFC NOT GENERATINGCFM}
  1602.     INLINE $3f3c, 1293, $AA5E;
  1603.     {$ENDC}
  1604. FUNCTION MSAMGetEnclosure(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1605.     {$IFC NOT GENERATINGCFM}
  1606.     INLINE $3f3c, 1294, $AA5E;
  1607.     {$ENDC}
  1608. FUNCTION MSAMEnumerateBlocks(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1609.     {$IFC NOT GENERATINGCFM}
  1610.     INLINE $3f3c, 1295, $AA5E;
  1611.     {$ENDC}
  1612. FUNCTION MSAMGetBlock(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1613.     {$IFC NOT GENERATINGCFM}
  1614.     INLINE $3f3c, 1296, $AA5E;
  1615.     {$ENDC}
  1616. FUNCTION MSAMGetMsgHeader(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1617.     {$IFC NOT GENERATINGCFM}
  1618.     INLINE $3f3c, 1297, $AA5E;
  1619.     {$ENDC}
  1620. { Put Interface Glue Routines }
  1621. FUNCTION MSAMCreate(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1622.     {$IFC NOT GENERATINGCFM}
  1623.     INLINE $3f3c, 1300, $AA5E;
  1624.     {$ENDC}
  1625. FUNCTION MSAMBeginNested(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1626.     {$IFC NOT GENERATINGCFM}
  1627.     INLINE $3f3c, 1301, $AA5E;
  1628.     {$ENDC}
  1629. FUNCTION MSAMEndNested(VAR paramBlock: MSAMParam): OSErr;
  1630.     {$IFC NOT GENERATINGCFM}
  1631.     INLINE $7000, $1f00, $3f3c, 1302, $AA5E;
  1632.     {$ENDC}
  1633. {  SYNCHRONOUS ONLY }
  1634. FUNCTION MSAMSubmit(VAR paramBlock: MSAMParam): OSErr;
  1635.     {$IFC NOT GENERATINGCFM}
  1636.     INLINE $7000, $1f00, $3f3c, 1303, $AA5E;
  1637.     {$ENDC}
  1638. FUNCTION MSAMPutAttribute(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1639.     {$IFC NOT GENERATINGCFM}
  1640.     INLINE $3f3c, 1304, $AA5E;
  1641.     {$ENDC}
  1642. FUNCTION MSAMPutRecipient(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1643.     {$IFC NOT GENERATINGCFM}
  1644.     INLINE $3f3c, 1305, $AA5E;
  1645.     {$ENDC}
  1646. FUNCTION MSAMPutContent(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1647.     {$IFC NOT GENERATINGCFM}
  1648.     INLINE $3f3c, 1306, $AA5E;
  1649.     {$ENDC}
  1650. {  SYNCHRONOUS ONLY }
  1651. FUNCTION MSAMPutEnclosure(VAR paramBlock: MSAMParam): OSErr;
  1652.     {$IFC NOT GENERATINGCFM}
  1653.     INLINE $7000, $1f00, $3f3c, 1307, $AA5E;
  1654.     {$ENDC}
  1655. FUNCTION MSAMPutBlock(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1656.     {$IFC NOT GENERATINGCFM}
  1657.     INLINE $3f3c, 1308, $AA5E;
  1658.     {$ENDC}
  1659. FUNCTION MSAMPutMsgHeader(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1660.     {$IFC NOT GENERATINGCFM}
  1661.     INLINE $3f3c, 1309, $AA5E;
  1662.     {$ENDC}
  1663. { Reports and Error Handling Glue Routines }
  1664. FUNCTION MSAMCreateReport(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1665.     {$IFC NOT GENERATINGCFM}
  1666.     INLINE $3f3c, 1311, $AA5E;
  1667.     {$ENDC}
  1668. FUNCTION MSAMPutRecipientReport(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1669.     {$IFC NOT GENERATINGCFM}
  1670.     INLINE $3f3c, 1312, $AA5E;
  1671.     {$ENDC}
  1672. FUNCTION PMSAMLogError(VAR paramBlock: MSAMParam): OSErr;
  1673.     {$IFC NOT GENERATINGCFM}
  1674.     INLINE $7000, $1f00, $3f3c, 1313, $AA5E;
  1675.     {$ENDC}
  1676. { MsgSummary Glue Routines }
  1677. FUNCTION PMSAMCreateMsgSummary(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1678.     {$IFC NOT GENERATINGCFM}
  1679.     INLINE $3f3c, 1314, $AA5E;
  1680.     {$ENDC}
  1681. FUNCTION PMSAMPutMsgSummary(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1682.     {$IFC NOT GENERATINGCFM}
  1683.     INLINE $3f3c, 1317, $AA5E;
  1684.     {$ENDC}
  1685. FUNCTION PMSAMGetMsgSummary(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1686.     {$IFC NOT GENERATINGCFM}
  1687.     INLINE $3f3c, 1318, $AA5E;
  1688.     {$ENDC}
  1689.  
  1690. {$ALIGN RESET}
  1691. {$POP}
  1692.  
  1693. {$SETC UsingIncludes := OCEMailIncludes}
  1694.  
  1695. {$ENDC} {__OCEMAIL__}
  1696.  
  1697. {$IFC NOT UsingIncludes}
  1698.  END.
  1699. {$ENDC}
  1700.